home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML Instance.sea / XML Instance / Required / ldapjdk.jar / netscape / ldap / ber / stream / BERBitString.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-04-13  |  2.4 KB  |  206 lines

  1. package netscape.ldap.ber.stream;
  2.  
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.io.OutputStream;
  6. import java.util.BitSet;
  7.  
  8. public class BERBitString extends BERElement {
  9.    private BitSet m_value;
  10.    private int m_value_num_bits;
  11.  
  12.    public BERBitString(BitSet var1) {
  13.       this.m_value = var1;
  14.    }
  15.  
  16.    public BERBitString(BERTagDecoder var1, InputStream var2, int[] var3) throws IOException {
  17.       int var4 = BERElement.readLengthOctets(var2, var3);
  18.       int[] var5 = new int[1];
  19.       Object var6 = null;
  20.       if (var4 == -1) {
  21.          var5[0] = 0;
  22.          BERElement var12 = BERElement.getElement(var1, var2, var5);
  23.          if (var12 != null) {
  24.             BERBitString var13 = (BERBitString)var12;
  25.             BitSet var14 = new BitSet(this.m_value_num_bits + var13.getSize());
  26.  
  27.             for(int var15 = 0; var15 < this.m_value_num_bits; ++var15) {
  28.                if (this.m_value.get(var15)) {
  29.                   var14.set(var15);
  30.                }
  31.             }
  32.  
  33.             for(int var16 = 0; var16 < var13.getSize(); ++var16) {
  34.                if (var13.getValue().get(var16)) {
  35.                   var14.set(this.m_value_num_bits + var16);
  36.                }
  37.             }
  38.  
  39.             this.m_value = var14;
  40.             this.m_value_num_bits += var13.getSize();
  41.          }
  42.  
  43.          while(var12 != null) {
  44.          }
  45.  
  46.       } else {
  47.          for(var3[0] += var4; var4 > 0; var4 -= var5[0]) {
  48.             var5[0] = 0;
  49.             BERElement var11 = BERElement.getElement(var1, var2, var5);
  50.             if (var11 != null) {
  51.                BERBitString var7 = (BERBitString)var11;
  52.                BitSet var8 = new BitSet(this.m_value_num_bits + var7.getSize());
  53.  
  54.                for(int var9 = 0; var9 < this.m_value_num_bits; ++var9) {
  55.                   if (this.m_value.get(var9)) {
  56.                      var8.set(var9);
  57.                   }
  58.                }
  59.  
  60.                for(int var10 = 0; var10 < var7.getSize(); ++var10) {
  61.                   if (var7.getValue().get(var10)) {
  62.                      var8.set(this.m_value_num_bits + var10);
  63.                   }
  64.                }
  65.  
  66.                this.m_value = var8;
  67.                this.m_value_num_bits += var7.getSize();
  68.             }
  69.          }
  70.  
  71.       }
  72.    }
  73.  
  74.    public BERBitString(InputStream var1, int[] var2) throws IOException {
  75.       int var4 = BERElement.readLengthOctets(var1, var2);
  76.       int var5 = var1.read();
  77.       int var10002 = var2[0]++;
  78.       --var4;
  79.       this.m_value_num_bits = (var4 - 1) * 8 + (8 - var5);
  80.       this.m_value = new BitSet();
  81.       int var6 = 0;
  82.  
  83.       for(int var7 = 0; var7 < var4 - 1; ++var7) {
  84.          int var3 = var1.read();
  85.          int var8 = 128;
  86.  
  87.          for(int var9 = 0; var9 < 8; ++var9) {
  88.             if ((var3 & var8) > 0) {
  89.                this.m_value.set(var6);
  90.             } else {
  91.                this.m_value.clear(var6);
  92.             }
  93.  
  94.             ++var6;
  95.             var8 /= 2;
  96.          }
  97.       }
  98.  
  99.       int var10 = var1.read();
  100.       int var12 = 128;
  101.  
  102.       for(int var13 = 0; var13 < 8 - var5; ++var13) {
  103.          if ((var10 & var12) > 0) {
  104.             this.m_value.set(var6);
  105.          } else {
  106.             this.m_value.clear(var6);
  107.          }
  108.  
  109.          ++var6;
  110.          var12 /= 2;
  111.       }
  112.  
  113.       var2[0] += var4;
  114.    }
  115.  
  116.    public void write(OutputStream var1) throws IOException {
  117.       var1.write(3);
  118.       int var2 = this.m_value_num_bits;
  119.       int var3 = 8 - var2 % 8;
  120.       int var4 = var2 / 8 + 1;
  121.       if (var3 > 0) {
  122.          ++var4;
  123.       }
  124.  
  125.       var1.write(var4);
  126.       var1.write(var3);
  127.  
  128.       for(int var5 = 0; var5 < var2 / 8; ++var5) {
  129.          int var6 = 0;
  130.          int var7 = 128;
  131.  
  132.          for(int var8 = 0; var8 < 8; ++var8) {
  133.             if (this.m_value.get(var5 * 8 + var8)) {
  134.                var6 += var7;
  135.             }
  136.  
  137.             var7 /= 2;
  138.          }
  139.  
  140.          var1.write(var6);
  141.       }
  142.  
  143.       if (var3 > 0) {
  144.          int var9 = 0;
  145.          int var10 = 128;
  146.  
  147.          for(int var11 = 0; var11 < var3; ++var11) {
  148.             if (this.m_value.get(var2 / 8 * 8 + var11)) {
  149.                var9 += var10;
  150.             }
  151.  
  152.             var10 /= 2;
  153.          }
  154.  
  155.          var1.write(var9);
  156.       }
  157.  
  158.    }
  159.  
  160.    public BitSet getValue() {
  161.       return this.m_value;
  162.    }
  163.  
  164.    public int getSize() {
  165.       return this.m_value_num_bits;
  166.    }
  167.  
  168.    public int getType() {
  169.       return 3;
  170.    }
  171.  
  172.    public String toString() {
  173.       String var1 = "";
  174.       int var3 = this.m_value_num_bits;
  175.  
  176.       for(int var4 = 0; var4 < var3 / 8; ++var4) {
  177.          int var2 = 0;
  178.          int var5 = 128;
  179.  
  180.          for(int var6 = 0; var6 < 8; ++var6) {
  181.             if (this.m_value.get(var4 * 8 + var6)) {
  182.                var2 += var5;
  183.             }
  184.  
  185.             var5 /= 2;
  186.          }
  187.  
  188.          var1 = var1 + " " + (byte)var2;
  189.       }
  190.  
  191.       int var9 = 128;
  192.       int var8 = 0;
  193.  
  194.       for(int var10 = 0; var10 < var3 - var3 / 8; ++var10) {
  195.          if (this.m_value.get(var3 / 8 * 8 + var10)) {
  196.             var8 += var9;
  197.          }
  198.  
  199.          var9 /= 2;
  200.       }
  201.  
  202.       var1 = var1 + " " + (byte)var8;
  203.       return "Bitstring {" + var1 + " }";
  204.    }
  205. }
  206.